(function($) {
    var namespace = 'colorful';    

    var methods = {
        init: function (options) {//$.extend起合并作用
            options = $.extend({}, $.fn[namespace].defaults, options);
            if (options.color) {
                this.css('color', options.color)
            }
            if (options.background) {
                this.css('background', options.background)
            }
            if (options.font) {
                this.css('font', options.font)
            }
            return this //为了链式语法不中断
        }
    };

    //这个方法可在多个插件中复用
    $.fn[namespace] = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)) //因为arguments并不是真正的数组对象，只是与数组类似而已，所以它并没有slice这个方法，而Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象，让arguments具有slice()方法。要是直接写arguments.slice(1)会报错
        } else if (($.type(method) === 'object') || (method == null) ){
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist!');
        }
    };

    //$.fn.colorful.defaults.color = 'xxxx',这样可以不用动用插件代码就可以修改
    $.fn[namespace].defaults = {
        color: 'red',
        background: '#eee',
        font: false
    };
})(jQuery);